package com.heima.feign.clients;

import com.heima.article.dto.ArticleDto;
import com.heima.article.pojo.ArticleContent;
import com.heima.feign.fallback.ArticleClientFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

/**
 * 编写远程调用的接口
 * feign中你可以有多个@RequestParam，但只能有不超过一个@RequestBody
 */
@FeignClient(value = "leadnews-article", fallback = ArticleClientFallBack.class)  //value参数是需要访问服务的名称，fallback是降级处理的实现类
@Transactional
public interface ArticleClient {

    /**
     * 当自媒体文章审核通过时，添加Article表
     *
     * @param dto
     * @return
     */
    @PostMapping("/api/v1/article/save")
    Long saveNews(@RequestBody ArticleDto dto);


    /**
     * 当自媒体文章审核通过时，添加Article表同时，添加ArticleConfig表
     *
     * @param articleId
     */
    @PostMapping("/api/v1/articleConfig/save")
    void saveArticleConfig(@RequestBody Long articleId);


    /**
     * 当自媒体文章审核通过时，添加Article表同时，添加ArticleConfig表，添加content表
     *
     * @param dto
     */
    @PostMapping("/api/v1/articleContent/save/content")
    void saveContent(@RequestBody ArticleDto dto);

    /**
     * 自媒体审核通过后执行此方法，将文章详情利用模版引擎转为html，上传至minio
     * @param dto
     */
    @PostMapping("/api/v1/up2Minio")
    void upload2Minio(@RequestBody ArticleDto dto);

}
